{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第四步：在 max_depth=5,min_child_weight=4基础上，重新调节nestimator"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先 import 必要的模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# path to where the data lies\n",
    "dpath = './'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = np.array(train.drop([\"interest_level\"], axis=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 3\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        print(cvresult) \n",
    "        #result = pd.DataFrame(cvresult)   #cv缺省返回结果为DataFrame\n",
    "        #result.to_csv('my_preds.csv', index_label = 'n_estimators')\n",
    "        cvresult.to_csv('my_preds4_2_3_320.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        # plot\n",
    "        test_means = cvresult['test-mlogloss-mean']\n",
    "        test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "        train_means = cvresult['train-mlogloss-mean']\n",
    "        train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "        x_axis = range(0, n_estimators)\n",
    "        pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "        pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "        pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "        pyplot.xlabel( 'n_estimators' )\n",
    "        pyplot.ylabel( 'Log Loss' )\n",
    "        pyplot.savefig( 'n_estimators4_2_3_320.png' )\n",
    "    \n",
    "    #Fit the algorithm on the data\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "        \n",
    "    #Print model report:\n",
    "    print(\"logloss of train :\" )\n",
    "    print(logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     train-mlogloss-mean  train-mlogloss-std  test-mlogloss-mean  \\\n",
      "0               1.039315            0.000513            1.039801   \n",
      "1               0.989389            0.000733            0.990502   \n",
      "2               0.947022            0.000543            0.948539   \n",
      "3               0.909977            0.000340            0.911951   \n",
      "4               0.878228            0.000332            0.880534   \n",
      "5               0.850477            0.000282            0.853157   \n",
      "6               0.826112            0.000576            0.829129   \n",
      "7               0.804667            0.000696            0.808079   \n",
      "8               0.785813            0.000647            0.789660   \n",
      "9               0.769137            0.000780            0.773432   \n",
      "10              0.754315            0.000779            0.758984   \n",
      "11              0.741058            0.000524            0.746045   \n",
      "12              0.729202            0.000533            0.734627   \n",
      "13              0.718528            0.000471            0.724317   \n",
      "14              0.708966            0.000599            0.715153   \n",
      "15              0.700342            0.000546            0.706818   \n",
      "16              0.692827            0.000688            0.699697   \n",
      "17              0.685905            0.000573            0.693102   \n",
      "18              0.679782            0.000669            0.687385   \n",
      "19              0.674020            0.000735            0.682042   \n",
      "20              0.668739            0.000801            0.677124   \n",
      "21              0.664005            0.000859            0.672805   \n",
      "22              0.659620            0.000891            0.668668   \n",
      "23              0.655675            0.001067            0.665040   \n",
      "24              0.651848            0.001119            0.661545   \n",
      "25              0.648243            0.001216            0.658354   \n",
      "26              0.645074            0.001063            0.655514   \n",
      "27              0.642044            0.000959            0.652893   \n",
      "28              0.639294            0.000833            0.650486   \n",
      "29              0.636698            0.000785            0.648337   \n",
      "..                   ...                 ...                 ...   \n",
      "286             0.502027            0.000752            0.587017   \n",
      "287             0.501778            0.000772            0.587011   \n",
      "288             0.501542            0.000806            0.587046   \n",
      "289             0.501282            0.000818            0.586981   \n",
      "290             0.501076            0.000779            0.586960   \n",
      "291             0.500783            0.000785            0.587023   \n",
      "292             0.500560            0.000757            0.587053   \n",
      "293             0.500270            0.000764            0.587011   \n",
      "294             0.500030            0.000800            0.587001   \n",
      "295             0.499760            0.000790            0.586967   \n",
      "296             0.499529            0.000765            0.586971   \n",
      "297             0.499264            0.000814            0.586973   \n",
      "298             0.498996            0.000807            0.586944   \n",
      "299             0.498751            0.000811            0.586966   \n",
      "300             0.498486            0.000790            0.586933   \n",
      "301             0.498200            0.000788            0.586915   \n",
      "302             0.497909            0.000824            0.586874   \n",
      "303             0.497667            0.000831            0.586818   \n",
      "304             0.497377            0.000827            0.586792   \n",
      "305             0.497127            0.000880            0.586764   \n",
      "306             0.496928            0.000865            0.586772   \n",
      "307             0.496694            0.000823            0.586725   \n",
      "308             0.496466            0.000810            0.586824   \n",
      "309             0.496246            0.000776            0.586778   \n",
      "310             0.495992            0.000766            0.586744   \n",
      "311             0.495766            0.000766            0.586789   \n",
      "312             0.495471            0.000804            0.586726   \n",
      "313             0.495173            0.000822            0.586667   \n",
      "314             0.494906            0.000787            0.586599   \n",
      "315             0.494694            0.000779            0.586556   \n",
      "\n",
      "     test-mlogloss-std  \n",
      "0             0.000325  \n",
      "1             0.001046  \n",
      "2             0.001004  \n",
      "3             0.001261  \n",
      "4             0.001316  \n",
      "5             0.001196  \n",
      "6             0.001319  \n",
      "7             0.001418  \n",
      "8             0.001504  \n",
      "9             0.001226  \n",
      "10            0.001342  \n",
      "11            0.001666  \n",
      "12            0.001700  \n",
      "13            0.001912  \n",
      "14            0.001745  \n",
      "15            0.001835  \n",
      "16            0.001734  \n",
      "17            0.001854  \n",
      "18            0.001842  \n",
      "19            0.001947  \n",
      "20            0.001963  \n",
      "21            0.001955  \n",
      "22            0.002035  \n",
      "23            0.002005  \n",
      "24            0.002123  \n",
      "25            0.002125  \n",
      "26            0.002193  \n",
      "27            0.002256  \n",
      "28            0.002289  \n",
      "29            0.002266  \n",
      "..                 ...  \n",
      "286           0.003544  \n",
      "287           0.003565  \n",
      "288           0.003476  \n",
      "289           0.003424  \n",
      "290           0.003393  \n",
      "291           0.003400  \n",
      "292           0.003451  \n",
      "293           0.003397  \n",
      "294           0.003416  \n",
      "295           0.003438  \n",
      "296           0.003432  \n",
      "297           0.003391  \n",
      "298           0.003386  \n",
      "299           0.003436  \n",
      "300           0.003431  \n",
      "301           0.003437  \n",
      "302           0.003361  \n",
      "303           0.003377  \n",
      "304           0.003402  \n",
      "305           0.003417  \n",
      "306           0.003454  \n",
      "307           0.003385  \n",
      "308           0.003297  \n",
      "309           0.003317  \n",
      "310           0.003326  \n",
      "311           0.003321  \n",
      "312           0.003341  \n",
      "313           0.003319  \n",
      "314           0.003353  \n",
      "315           0.003360  \n",
      "\n",
      "[316 rows x 4 columns]\n",
      "logloss of train :\n",
      "0.5075428954818839\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 9}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_estimators is :  316\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/zhangwt/.local/lib/python3.6/site-packages/ipykernel_launcher.py:2: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \n"
     ]
    }
   ],
   "source": [
    "# n_estimators\n",
    "cvresult = pd.DataFrame.from_csv('my_preds4_2_3_320.csv')\n",
    "#cvresult.shape\n",
    "#cvresult.head\n",
    "print(\"n_estimators is : \", cvresult.shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train-mlogloss-mean is : 0.4946938\n",
      "test-mlogloss-mean is : 0.5865556\n"
     ]
    }
   ],
   "source": [
    "# train-mlogloss-mean\n",
    "print(\"train-mlogloss-mean is :\", cvresult['train-mlogloss-mean'][315])\n",
    "print(\"test-mlogloss-mean is :\", cvresult['test-mlogloss-mean'][315])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
